using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._CartographyTools._Generalization
{
    /// <summary>
    /// <para>Thin Road Network</para>
    /// <para>Generates a simplified road network that retains connectivity and general character for display at a smaller scale.</para>
    /// <para>生成简化的道路网络，保留连通性和一般特征，以便在较小比例上显示。</para>
    /// </summary>    
    [DisplayName("Thin Road Network")]
    public class ThinRoadNetwork : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ThinRoadNetwork()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input Road Features</para>
        /// <para>The input linear roads that will be thinned to create a simplified collection for display at smaller scales.</para>
        /// <para>输入线性道路，这些道路将被细化以创建简化的集合，以便在较小的比例下显示。</para>
        /// </param>
        /// <param name="_minimum_length">
        /// <para>Minimum Length</para>
        /// <para>An indication of the shortest road segment that is sensible to display at the output scale. This controls the resolution, or density, of the resulting road collection. If the units are in points, millimeters, centimeters, or inches, the value is considered in page units and the reference scale is taken into account.</para>
        /// <para>在输出比例下显示的最短路段的指示。这控制了生成的道路收集的分辨率或密度。如果单位以磅、毫米、厘米或英寸为单位，则以页面单位考虑该值，并考虑参考比例。</para>
        /// </param>
        /// <param name="_invisibility_field">
        /// <para>Invisibility Field</para>
        /// <para>The field that stores the results of the tool. Features that participate in the resulting simplified road collection have a value of 0 (zero). Those that are extraneous have a value of 1. A layer definition query can be used to display the resulting road collection. This field must be present and named the same for each input feature class.</para>
        /// <para>存储工具结果的字段。参与生成的简化道路集合的要素的值为 0（零）。那些无关紧要的值为 1。图层定义查询可用于显示生成的道路集合。对于每个输入要素类，此字段必须存在且名称相同。</para>
        /// </param>
        /// <param name="_hierarchy_field">
        /// <para>Hierarchy Field</para>
        /// <para>The field that contains hierarchical ranking of feature importance, in which 1 is very important and larger integers reflect decreasing importance. A value of 0 forces the feature to remain visible in the output collection. This field must be present and named the same for each input feature class. Hierarchy values equal to NULL are not accepted and will produce an error.</para>
        /// <para>包含特征重要性分层排名的字段，其中 1 非常重要，较大的整数表示重要性递减。值为 0 将强制要素在输出集合中保持可见。对于每个输入要素类，此字段必须存在且名称相同。不接受等于 NULL 的层次结构值，并且将生成错误。</para>
        /// </param>
        public ThinRoadNetwork(List<object> _in_features, string? _minimum_length, object _invisibility_field, object _hierarchy_field)
        {
            this._in_features = _in_features;
            this._minimum_length = _minimum_length;
            this._invisibility_field = _invisibility_field;
            this._hierarchy_field = _hierarchy_field;
        }
        public override string ToolboxName => "Cartography Tools";

        public override string ToolName => "Thin Road Network";

        public override string CallName => "cartography.ThinRoadNetwork";

        public override List<string> AcceptEnvironments => ["cartographicCoordinateSystem", "cartographicPartitions", "referenceScale"];

        public override object[] ParameterInfo => [_in_features, _minimum_length, _invisibility_field, _hierarchy_field, _out_features];

        /// <summary>
        /// <para>Input Road Features</para>
        /// <para>The input linear roads that will be thinned to create a simplified collection for display at smaller scales.</para>
        /// <para>输入线性道路，这些道路将被细化以创建简化的集合，以便在较小的比例下显示。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Road Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _in_features { get; set; }


        /// <summary>
        /// <para>Minimum Length</para>
        /// <para>An indication of the shortest road segment that is sensible to display at the output scale. This controls the resolution, or density, of the resulting road collection. If the units are in points, millimeters, centimeters, or inches, the value is considered in page units and the reference scale is taken into account.</para>
        /// <para>在输出比例下显示的最短路段的指示。这控制了生成的道路收集的分辨率或密度。如果单位以磅、毫米、厘米或英寸为单位，则以页面单位考虑该值，并考虑参考比例。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Minimum Length")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public string? _minimum_length { get; set; }


        /// <summary>
        /// <para>Invisibility Field</para>
        /// <para>The field that stores the results of the tool. Features that participate in the resulting simplified road collection have a value of 0 (zero). Those that are extraneous have a value of 1. A layer definition query can be used to display the resulting road collection. This field must be present and named the same for each input feature class.</para>
        /// <para>存储工具结果的字段。参与生成的简化道路集合的要素的值为 0（零）。那些无关紧要的值为 1。图层定义查询可用于显示生成的道路集合。对于每个输入要素类，此字段必须存在且名称相同。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Invisibility Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _invisibility_field { get; set; }


        /// <summary>
        /// <para>Hierarchy Field</para>
        /// <para>The field that contains hierarchical ranking of feature importance, in which 1 is very important and larger integers reflect decreasing importance. A value of 0 forces the feature to remain visible in the output collection. This field must be present and named the same for each input feature class. Hierarchy values equal to NULL are not accepted and will produce an error.</para>
        /// <para>包含特征重要性分层排名的字段，其中 1 非常重要，较大的整数表示重要性递减。值为 0 将强制要素在输出集合中保持可见。对于每个输入要素类，此字段必须存在且名称相同。不接受等于 NULL 的层次结构值，并且将生成错误。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Hierarchy Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _hierarchy_field { get; set; }


        /// <summary>
        /// <para>Updated Input Road Features</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Input Road Features")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public List<object> _out_features { get; set; }


        public ThinRoadNetwork SetEnv(object cartographicCoordinateSystem = null, object cartographicPartitions = null, object referenceScale = null)
        {
            base.SetEnv(cartographicCoordinateSystem: cartographicCoordinateSystem, cartographicPartitions: cartographicPartitions, referenceScale: referenceScale);
            return this;
        }

    }

}